//
//  main.m
//  NSFileManager
//
//  Created by wenjim on 17/10/25.
//  Copyright © 2017年 WenJim. All rights reserved.
//

#import <Foundation/Foundation.h>

#pragma mark - 作业
int work()
{
    // 作业： 要求计算一个文件夹中所有文件的大小
    // 注意：如果通过attributesOFItemAtPath方法直接获取，那么获取到的文件夹大小不准确
    // 要想实现计算一个文件夹中所有文件的大小必须先拿到所有文件，然后再获取所有文件的大小，然后再追加
    
    NSFileManager * manager = [NSFileManager defaultManager];
    
    NSString * fileStr = @"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存";
    
    BOOL flag = [manager fileExistsAtPath:fileStr];
    
    if (flag == 1) {
        // 有存在文件
       NSArray * arr =  [manager subpathsOfDirectoryAtPath:fileStr error:nil];
        NSLog(@"arr = %@, count = %ld",arr,arr.count);
        
        NSMutableArray * sizeArr = [NSMutableArray array];;
        
        // 遍历出里面的文件所在的路径
        for (int i = 0; i < arr.count; i ++) {
            // 获取全部文件所在的地址
            NSString * attributesStr = [NSString stringWithFormat:@"%@/%@",fileStr,arr[i]];
//            NSLog(@"内容有:%@",attributesStr);
            
            if ([arr[i] isEqualToString:@"File"]) {
                
            }else{
            // 获取全部文件的属性
            NSDictionary * dic = [manager attributesOfItemAtPath:attributesStr error:nil];
//            NSLog(@"属性有:%@",dic);
            
            // 获取所有文件大小
            NSString * dicStr = [NSString stringWithFormat:@"%@",dic[@"NSFileSize"]];
            NSLog(@"大小有有:%@",dicStr);
                // 把获取到的值保存到可变数组里面
                [sizeArr addObject:dicStr];
            }
            
        }
        
        // 相加
        CGFloat sum = [[sizeArr valueForKeyPath:@"@sum.floatValue"] floatValue];
        
        // 
        CGFloat avg = [[sizeArr valueForKeyPath:@"@avg.floatValue"] floatValue];
        
        // 最大值
        CGFloat max =[[sizeArr valueForKeyPath:@"@max.floatValue"] floatValue];
        
        // 最小值
        CGFloat min =[[sizeArr valueForKeyPath:@"@min.floatValue"] floatValue];
        
//        NSString * sizeStr = [NSString stringWithFormat:@"%@",sizeArr[0]];
        
        NSLog(@"总的文件大小为：%f",sum);
        
        __block NSInteger sum1 = 0;
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_apply(sizeArr.count, queue, ^(size_t i) {
            sum1 += [sizeArr[i] integerValue];
        });
        NSLog(@"sum1 = %ld",(long)sum1);
        
        
    }
    
    
    return 0;
}

int main(int argc, const char * argv[]) {
    
    
    NSFileManager * manager = [NSFileManager defaultManager];
    
    // 1. 判断一个文件或者文件夹是否存在
    /*
    BOOL flag = [manager fileExistsAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存"];
    NSLog(@"flag = %i",flag);
    
    BOOL flag1 = [manager fileExistsAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存/cwj.txt"];
    NSLog(@"flag1 = %i",flag1);
    */
    
    // 2. 判断一个文件是否存在，并且判断它是否是一个文件夹
    /*
    // 注意：该方法的返回值是说明传入的路径对应的文件或文件夹是否存在
    // isDirectory 用于保存判断结果的，如果是一个目录，那么就会赋值为YES，如果不是就会赋值为NO
    BOOL dir = NO;
    BOOL flag2 = [manager fileExistsAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存" isDirectory:&dir];
    NSLog(@"flag2 = %i,dir = %i",flag2,dir);
    
    BOOL flag3 = [manager fileExistsAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存/cwj.txt" isDirectory:&dir];
    NSLog(@"flag3 = %i,dir = %i",flag3,dir);
    */
    
    // 3. 获取文件或文件夹的属性
    
//    NSDictionary * dic = [manager attributesOfItemAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存/cwj.txt" error:nil];
//    
//    NSLog(@"%@",dic);
    
    // 4.获取文件夹中的所有文件
    // 注意：contentsOfDirectoryAtPath 方法有一个弊端，只能获取当前文件夹所有的文件，不能获取子文件夹下面的文件
//    NSArray * arr = [manager contentsOfDirectoryAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/" error:nil];
//    NSLog(@"arr = %@,count = %ld",arr,arr.count);
//    
//    NSArray * arr2 =[manager subpathsAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/"];
//    NSLog(@"arr2 = %@,count = %ld",arr2,arr2.count);
//    
//    NSArray * arr3 = [manager subpathsOfDirectoryAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/" error:nil];
//    NSLog(@"arr3 = %@,count = %ld",arr3,arr3.count);
    
    // 5.创建文件夹
    // createDirectoryAtPath: 告诉系统文件夹需要创建到什么位置
    // withIntermediateDirectories: 如果指定的文件夹中有一些文件夹不存在，是否自动创建不存在的文件夹
    // attributes: 指定创建出来的文件夹的属性
    // error: 是否创建成功，如果失败会给传入的参数赋值
    // 注意：该方法只能用于创建文件夹，不会用于创建文件
//    BOOL flag = [manager createDirectoryAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存/File" withIntermediateDirectories:YES attributes:nil error:nil];
//    NSLog(@"flag = %i",flag);
    
    // 6.创建文件
    // createFileAtPath: 指定文件创建出来的位置
    // contents:文件中的内容
    // attributes: 创建出来的文件的属性
    
    // NSData : 二进制数据
    // 注意：该方法只能用于创建文件，不能用于创建文件夹
//    NSString * str = @"cwj Love zbc";
//    NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
//    [manager createFileAtPath:@"/Users/WJim/Desktop/Objective-CJiChuXueXi/Day8/Dem文件保存/File/cwj.txt" contents:data attributes:nil];
    
    // 作业： 要求计算一个文件夹中所有文件的大小
    // 注意：如果通过attributesOFItemAtPath方法直接获取，那么获取到的文件夹大小不准确
    // 要想实现计算一个文件夹中所有文件的大小必须先拿到所有文件，然后再获取所有文件的大小，然后再追加
    work();
    
    return 0;
}
